﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using Sistema_Totem.Presentacion.Contrato.Requerimientos;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Clases;
using System.Data;
using System.Web.Resources;
using System.Web.UI.WebControls;

namespace Sistema_Totem.Presentacion.Presentador.Requerimientos
{
    public class PresentadorEliminarRequerimiento
    {
        #region Atributos

        /// <summary>
        /// Instancia del contrato IContratoEliminarRequerimiento.
        /// </summary>
        private IContratoEliminarRequerimiento _iContratoEliminarRequerimiento;
        private List<Requerimiento> _requerimiento;
        private Comando<List<Requerimiento>> _comandoRequerimiento;

        #endregion Atributos

        #region Constructor

        public PresentadorEliminarRequerimiento
            (IContratoEliminarRequerimiento iContratoEliminarRequqrimiento)
        {
            _iContratoEliminarRequerimiento = iContratoEliminarRequqrimiento;
        }

        #endregion Constructor

        #region Metodos

        #region GV Consultar Requerimiento a Eliminar

        /// <summary>
        /// Método que llena el GV con todos los requerimientos .
        /// </summary>
        /// <param name="requerimiento"></param>
        public void CargarTablaRequerimiento(List<Requerimiento> requerimiento)
        {
            DataTable tabla = new DataTable();
            tabla.Columns.Add("Id", typeof(string));
            tabla.Columns.Add("Nombre", typeof(string));

            //Se recorre la lista de requerimientos 
            foreach (Requerimiento _req in requerimiento)
            {
                string s = null;
                int id = 0;
                foreach (Seccion _seccion in _req.ListaSeccion)
                {

                    foreach (ElementoControl _ele in _seccion.ListaControl)
                    {

                        if (_ele.Nombre == "Nombre")
                        {
                            id = _req.Id; 
                            s = _ele.Contenido;
                        }
                    }
                }
                tabla.Rows.Add(id,s);
            }
            //Seteamos el gridview con el datatable de los requerimientos.
            _iContratoEliminarRequerimiento.GVEliminarRequerimiento.DataSource = tabla;
            _iContratoEliminarRequerimiento.GVEliminarRequerimiento.DataBind();
        }

        #endregion GV Consultar Requerimiento a Eliminar

        #region Cargar GV Requerimiento

        /// <summary>
        /// Metodo que carga los requerimientos en el gridview.
        /// </summary>
        /// <param name="idProyecto"></param>
        /// <returns></returns>
        public List<Requerimiento> BuscarDocumentosRequerimiento()
        {
            // llamamos a la variable session que contiene el id del proyecto actual
            Proyecto _miProyecto = (Proyecto)_iContratoEliminarRequerimiento.Sesion["proyecto"];
            _comandoRequerimiento = FabricaComando.CrearComandoConsultarRequerimiento(_miProyecto.IdProyecto);
            _requerimiento = _comandoRequerimiento.Ejecutar();
            CargarTablaRequerimiento(_requerimiento);
            return _requerimiento;
        }

        #endregion Cargar GV Requerimiento

        #region Ocultar Columna GV

        /// <summary>
        /// Metodo que oculta la columna id del Requerimiento en el GV
        /// </summary>
        public void OcultarColumna()
        {
            _iContratoEliminarRequerimiento.GVEliminarRequerimiento.HeaderRow.
            Cells[0].Visible = false;
            foreach (GridViewRow row in _iContratoEliminarRequerimiento.
            GVEliminarRequerimiento.Rows)
            {
                row.Cells[0].Visible = false;
            }
        }

        #endregion Ocultar Columna GV

        #region Buscar requerimiento a elminar
        
        /// <summary>
        /// Metodo del motor de busqueda.
        /// </summary>
        /// <param name="requerimientos"></param>
        /// <param name="nombreRequerimiento"></param>
        public void buscarRequerimiento(object requerimientos, string nombreRequerimiento) 
        {
            List<Requerimiento> _requerimientos = requerimientos as List<Requerimiento>;
            List<Requerimiento> _requerimientosResultado = new List<Requerimiento>();
            foreach (Requerimiento _miRequerimiento in _requerimientos)
            {
                foreach (Seccion _miSeccion in _miRequerimiento.ListaSeccion)
                {
                    foreach (ElementoControl _miElemento in _miSeccion.ListaControl)
                    {
                        if ((_miElemento.Nombre == "Nombre") && (_miElemento.Contenido.Contains(nombreRequerimiento)))
                        {
                            _requerimientosResultado.Add(_miRequerimiento);
                        }
                    }
                }
            }
            CargarTablaRequerimiento(_requerimientosResultado);
            OcultarColumna();

        }
        #endregion Buscar requerimiento a elminar

        #region Eliminar un requerimiento seleccionado del GV

        /// <summary>
        /// Metodo que elimina un requerimiento seleccionado
        /// del gridview.
        /// </summary>
        /// <param name="id"></param>
        public void EliminarRequerimiento(int id) 
        {
           Comando<bool> eliminarReq = FabricaComando.CrearComandoEliminarRequerimiento(id);
           eliminarReq.Ejecutar();
        }

        #endregion Eliminar un requerimiento seleccionado del GV

        #endregion Metodos
    }
}